/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Model.Produit;
import Model.Promotions;
import Model.TradProd;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

/**
 *
 * @author Anthares
 */
public class ProductsManager extends BaseManager {
    public ProductsManager(SessionFactory factory, String locale) {
        super(factory, locale);
    }

    public Produit getProductByID(int id) {
        Session sess = factory.openSession();
        Produit prod = (Produit) sess.getNamedQuery("Produit.findByProdId").setInteger("prodId", id).uniqueResult();
        prod.setTraduction(getTraduction(id));
        prod.setBestPromotions(getBestProm(id));
        prod.getCategId().setBestPromo(getBestPromForCateg(prod));
        prod.setPromotionsList(getPromotions(prod.getProdId()));

        sess.close();
        return prod;
    }

    public List<Produit> getAllProductByCategory(int categId) {
        Session sess = factory.openSession();
        List<Produit> list = (List<Produit>) sess.getNamedQuery("Produit.findByCategory").setInteger("categId", categId).list();
        for(Produit produit : list){
            produit.setTraduction(getTraduction(produit.getProdId()));
            produit.setBestPromotions(getBestProm(produit.getProdId()));
            produit.getCategId().setBestPromo(getBestPromForCateg(produit));
            produit.setPromotionsList(getPromotions(produit.getProdId()));

        }
        return list;
    }

    public List<Produit> getAllProducts() {
        Session sess = factory.openSession();
        List<Produit> list = (List<Produit>) sess.getNamedQuery("Produit.findAll").list();
        for(Produit produit : list){
            produit.setTraduction(getTraduction(produit.getProdId()));
            produit.setBestPromotions(getBestProm(produit.getProdId()));
            produit.getCategId().setBestPromo(getBestPromForCateg(produit));
            produit.setPromotionsList(getPromotions(produit.getProdId()));
        }
        return list;
    }

    private TradProd getTraduction(int id) {
        return new TradProdManager(factory, locale).getTradProdById(id);
    }

    private Promotions getBestProm(int id) {
        return new PromotionManager(factory, locale).getCurrentBestPromotionByProduct(id);
    }

    private Promotions getBestPromForCateg(Produit prod) {
        return new PromotionManager(factory, locale).getCurrentBestPromotionByCateg(prod.getCategId().getCategId());
    }

    private List<Promotions> getPromotions(int prodId) {
        return new PromotionManager(factory, locale).getCurrentPromotionsByProduct(prodId);
    }
}
